<template>
	<view class="app">
		<view v-if="!openExamine">
			<view class="page-tit">
				<text>充值金额</text>
			</view>
			<view class="price-list">
				<view 
					class="p-item center" 
					:class="{active: item.checked}"
					v-for="(item, index) in moneyList" 
					:key="index"
					@click="checkePrice(item)"
				>
					<text>{{ item.money }}元</text>
				</view>
			</view>
			<view class="input-wrap row">
				<text>其他金额</text>
				<input v-model="money" type="number" maxlength="10" class="input" placeholder="请输入其他金额" placeholder-style="color: #999" />
			</view>
			<view class="page-tit">
				<text class="f-b">选择支付方式</text>
			</view>
			<view class="cell row b-b" @click="checkType('wxpay')">
				<!-- <image class="icon" :src="'/static/icon/wxpay.png'"></image> -->
				<view class="column fill">
					<text class="tit">微信支付</text>
				</view>
				<text v-if="curType === 'wxpay'" class="mix-icon icon-xuanzhong"></text>
			</view>
			<!-- #ifndef MP-WEIXIN -->
			<view class="cell row b-b" @click="checkType('alipay')">
				<!-- <image class="icon" :src="'/static/icon/alipay.png'"></image> -->
				<view class="column fill">
					<text class="tit">支付宝</text>
				</view>
				<text v-if="curType === 'alipay'" class="mix-icon icon-xuanzhong"></text>
			</view>
			<!-- #endif -->
			
			<mix-button ref="confirmBtn" text="确认充值" marginTop="80rpx" @onConfirm="confirm"></mix-button>
		</view>
		
		<mix-empty v-else></mix-empty>
		
		<mix-loading v-if="isLoading" :mask="true"></mix-loading>
		<!-- 支付成功面板 -->
		<success-modal ref="successModal" :price="payPrice" btnText="确定" tip="余额充值成功" @onConfirm="successCallback"></success-modal>
	</view>
</template>

<script>
	import successModal from './components/success-modal.vue'
	export default {
		components:{
			successModal
		},
		data() {
			return {
				curType: 'wxpay',
				moneyList: [
					{money: 50, checked: true},
					{money: 100, checked: false},
					{money: 200, checked: false},
					{money: 500, checked: false},
				],
				money: '',
				payPrice: 0,
			}
		},
		computed: {
			openExamine(){
				return this.$store.state.openExamine;
			}
		},
		watch: {
			money(val){
				if(val){
					this.moneyList.forEach(item=> {
						item.checked = false;
					})
				}
			}
		},
		onLoad() {
			if(!this.openExamine){
				uni.setNavigationBarTitle({
					title: '余额充值'
				})
			}else{
				uni.setNavigationBarTitle({
					title: '消费明细'
				})
			}
		},
		methods: {
			confirm(){
				let {curType, moneyList, money} = this;
				const mIndex = moneyList.findIndex(item=> item.checked);
				if(!money && mIndex === -1){
					this.$util.msg('请选择或输入充值金额');
					this.$refs.confirmBtn.stop();
					return;
				}
				money = this.money || this.moneyList[mIndex].money;
				if(isNaN(money)){
					this.$util.msg('请输入正确的充值金额');
					this.$refs.confirmBtn.stop();
					return;
				}
				this.$util.throttle(()=>{
					this.wxpay((+money).toFixed(2));
				})
			},
			//微信支付
			async wxpay(money){
				const res = await this.$request('payment', 'recharge', {
					money: +money,
					pay_type: 'wxpay',
					// #ifdef MP-WEIXIN
					code: await this.getMpCode('weixin'),
					// #endif
				}, {showLoading: true})
				
				this.log(res)
				if(res.status !== 1){
					this.$refs.confirmBtn.stop();
					this.$util.msg(res.msg);
					return;
				}
				const orderInfo = res.data.orderInfo;
				const {timeStamp, nonceStr, paySign} = orderInfo;
				const payParams = {
					provider: this.curType,
					orderInfo: res.data.orderInfo,
					timeStamp,
					nonceStr,
					package: orderInfo.package,
					signType: 'MD5',
					paySign,
					success: e=>{
						this.payPrice = money;
						this.$refs.confirmBtn.death();
						this.$refs.successModal.open();
					}, 
					fail: err=>{
						this.$refs.confirmBtn.stop();
						if(err.errMsg.indexOf('取消') > -1 || err.errMsg.indexOf('cancel') >1 || err.errMsg.indexOf('-2') > -1){
							this.$util.msg('取消支付');
						}else{
							this.$util.msg('支付遇到错误，请稍候重试');
							console.log(err);
						}
					}
				};
				uni.requestPayment(payParams);
			},
			//统一支付回调
			successCallback(){
				this.$store.dispatch('getUserInfo');
				uni.navigateBack();
			},
			checkePrice(item){
				this.moneyList.forEach(item=> {
					item.checked = false;
				})
				this.money = '';
				item.checked = true;
			},
			checkType(type){
				this.curType = type;
			},
			//获取小程序code
			// #ifdef MP
			getMpCode(provider){
				return new Promise((resolve)=>{
					uni.login({
						provider,
						success(res) {
							resolve(res.code)
						}
					})
				})
			}
			// #endif
		}
	}
</script>

<style scoped lang="scss">
	.page-tit{
		padding: 40rpx 0 30rpx 40rpx;
		font-size: 32rpx;
		color: #333;
		line-height: 48rpx ;
		font-weight: 700;
	}
	.price-list{
		display: flex;
		flex-wrap: wrap;
		padding-left: 40rpx;
		
		.p-item{
			width: 160rpx;
			height: 78rpx;
			border-radius: 14rpx;
			margin-bottom: 20rpx;
			margin-right: 10rpx;
			background-color: #efefef;
			font-size: 28rpx;
			color: #999;
			border: 1rpx solid #d7d7d7;
			
			&.active{
				background:linear-gradient(131deg, #ff7e94, #fb4361);
				color: #fff;
				border: 0;
			}
		}
	}
	.input-wrap{
		height: 130rpx;
		padding: 10rpx 40rpx 0;
		font-size: 32rpx;
		color: #333;
		
		.input{
			flex: 1;
			text-align: right;
			font-size: 28rpx;
			color: #333;
		}
	}
	.cell{
		margin: 0 40rpx;
		height: 124rpx;
		
		.icon{
			width: 40rpx;
			height: 40rpx;
			margin-right: 32rpx;
		}
		.tit{
			flex: 1;
			font-size: 30rpx;
			color: #333;
			font-weight: 700;
		}
		.tip{
			margin-top: 14rpx;
			font-size: 24rpx;
			color: #999;
		}
		.icon-xuanzhong{
			font-size: 36rpx;
			color: $base-color;
		}
	}


</style>
